/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Ventana.java
 *
 * Created on May 7, 2011, 5:14:56 PM
 */
package cliente;

import java.io.*;
import java.net.*;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.attribute.standard.MediaSize.Other;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Ventana principal donde se visualizan las descargas
 * @author ignaciocardenas
 */
public class VentanaCliente extends javax.swing.JFrame {

    Vector<HiloDescarga> VectorHilos;
    int selected = -1;
    private String ip0 = null;
    private String ip1 = null;
    private String ip2 = null;

    /** Creates new form Ventana */
    public VentanaCliente() {
        VectorHilos = new Vector<HiloDescarga>();
        initComponents();
        pausar.setVisible(false);
        cancelar.setVisible(false);
        eliminar.setVisible(false);
        jDescargar.setVisible(false);
        jComboBox1.setVisible(false);
        XMLCliente xml = new XMLCliente();
        xml.cargaArchivos(this);
        HiloIPs hiloips = new HiloIPs(this);
        Thread nuevohiloips = new Thread(hiloips);
        nuevohiloips.start();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel2 = new javax.swing.JLabel();
        jIP = new javax.swing.JTextField();
        jDescargar = new javax.swing.JButton();
        jListarArchivos = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTabla = new javax.swing.JTable();
        cancelar = new javax.swing.JButton();
        pausar = new javax.swing.JButton();
        eliminar = new javax.swing.JButton();
        jComboBox1 = new javax.swing.JComboBox();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel2.setFont(new java.awt.Font("Lucida Grande", 2, 13));
        jLabel2.setText("Conectar a:");

        jIP.setText("localhost");
        jIP.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jIPActionPerformed(evt);
            }
        });

        jDescargar.setText("Descargar");
        jDescargar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jDescargarActionPerformed(evt);
            }
        });

        jListarArchivos.setText("Obtener lista de archivos");
        jListarArchivos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jListarArchivosActionPerformed(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Meiryo", 1, 13));
        jLabel1.setText("SICTransfer");

        jTabla.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Archivo", "Cantidad Descargada(KB)", "Total(KB)", "Estado", "hilo"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.Long.class, java.lang.Long.class, java.lang.String.class, java.lang.Integer.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTabla.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jTabla.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jTabla.getTableHeader().setReorderingAllowed(false);
        jTabla.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTablaMouseClicked(evt);
            }
        });
        jTabla.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTablaFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTablaFocusLost(evt);
            }
        });
        jScrollPane1.setViewportView(jTabla);
        jTabla.getColumnModel().getColumn(4).setResizable(false);
        jTabla.getColumnModel().getColumn(4).setPreferredWidth(1);

        cancelar.setText("Cancelar");
        cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelarActionPerformed(evt);
            }
        });

        pausar.setText("Pausar");
        pausar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                pausarActionPerformed(evt);
            }
        });

        eliminar.setText("Eliminar");
        eliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                eliminarActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(layout.createSequentialGroup()
                        .add(cancelar)
                        .add(27, 27, 27)
                        .add(pausar)
                        .add(33, 33, 33)
                        .add(eliminar))
                    .add(layout.createSequentialGroup()
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
                            .add(org.jdesktop.layout.GroupLayout.LEADING, layout.createSequentialGroup()
                                .add(jLabel2)
                                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                                .add(jIP))
                            .add(org.jdesktop.layout.GroupLayout.LEADING, jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 233, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                        .add(18, 18, 18)
                        .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                            .add(org.jdesktop.layout.GroupLayout.TRAILING, jComboBox1, 0, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .add(org.jdesktop.layout.GroupLayout.TRAILING, jListarArchivos, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(jDescargar))
                    .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 832, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jLabel1)
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jLabel2)
                    .add(jIP, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jListarArchivos))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(jComboBox1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                    .add(jDescargar))
                .add(18, 18, 18)
                .add(jScrollPane1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 156, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .add(18, 18, 18)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(cancelar)
                    .add(pausar)
                    .add(eliminar))
                .addContainerGap(51, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jIPActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jIPActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_jIPActionPerformed
/**
 * boton que inicia la descarga de un archivo
 * @param evt
 */
    private void jDescargarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jDescargarActionPerformed
        // TODO add your handling code here:
        XMLCliente xml = new XMLCliente();
        xml.escribirArchivos(this);
        HiloDescarga nuevadescarga = new HiloDescarga(this, jIP.getText(), jComboBox1.getSelectedItem().toString(), VectorHilos.size(), 0);
        VectorHilos.add(nuevadescarga);
        Thread nuevohilodescarga = new Thread(nuevadescarga);
        nuevohilodescarga.start();
    }//GEN-LAST:event_jDescargarActionPerformed

    /**
     * Boton que cancela la descarga
     * @param evt
     */
    private void cancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelarActionPerformed
        try {

            String status = (String) jTabla.getValueAt(selected, 3);

            if (status.matches("Descargando") == true) {
                int hilo = (Integer) jTabla.getValueAt(selected, 4);
                VectorHilos.get(hilo).cerrar();
                VectorHilos.setElementAt(null, hilo);
                jTabla.setValueAt("Cancelado", selected, 3);
                jTabla.setValueAt(null, selected, 4);
            } else {
                jTabla.setValueAt("Cancelado", selected, 3);
                jTabla.setValueAt(null, selected, 4);
            }
            XMLCliente xml = new XMLCliente();
            xml.escribirArchivos(this);
            this.eliminar.setVisible(true);
            this.pausar.setVisible(true);
            this.pausar.setText("Recomenzar");
            this.cancelar.setVisible(false);
        } catch (IOException ex) {
            Logger.getLogger(VentanaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//GEN-LAST:event_cancelarActionPerformed

    private void jTablaFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTablaFocusGained
    }//GEN-LAST:event_jTablaFocusGained

    private void jTablaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTablaFocusLost
    }//GEN-LAST:event_jTablaFocusLost

    private void pausarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pausarActionPerformed
        try {

            String accion = (String) jTabla.getValueAt(selected, 3);
            if (accion.matches("Descargando") == true) {

                int hilo = (Integer) jTabla.getValueAt(selected, 4);
                VectorHilos.get(hilo).cerrar();
                VectorHilos.setElementAt(null, hilo);
                jTabla.setValueAt("Pausado", selected, 3);
                jTabla.setValueAt(null, selected, 4);
                this.pausar.setText("Continuar");
            }
            if (accion.matches("Pausado") == true) {

                HiloDescarga nuevadescarga = new HiloDescarga(this, jIP.getText(), (String) jTabla.getValueAt(selected, 0), VectorHilos.size(), 1);
                VectorHilos.add(nuevadescarga);
                Thread nuevohilodescarga = new Thread(nuevadescarga);
                nuevohilodescarga.start();
                this.pausar.setText("Pausar");

            }
            if (accion.matches("Cancelado") == true) {

                HiloDescarga nuevadescarga = new HiloDescarga(this, jIP.getText(), (String) jTabla.getValueAt(selected, 0), VectorHilos.size(), 1);
                VectorHilos.add(nuevadescarga);
                Thread nuevohilodescarga = new Thread(nuevadescarga);
                nuevohilodescarga.start();
                this.pausar.setText("Pausar");
                this.cancelar.setVisible(true);
            }
            XMLCliente xml = new XMLCliente();
            xml.escribirArchivos(this);

        } catch (IOException ex) {
            Logger.getLogger(VentanaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//GEN-LAST:event_pausarActionPerformed

    /**
     * Boton que elimina la descarga
     * @param evt
     */
    private void eliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_eliminarActionPerformed
        try {

            String status = (String) jTabla.getValueAt(selected, 3);

            if (status.matches("Descargando") == true) {
                int hilo = (Integer) jTabla.getValueAt(selected, 4);
                VectorHilos.get(hilo).cerrar();
                VectorHilos.get(hilo).borrar();
                VectorHilos.setElementAt(null, hilo);// en vez de remove poner en null
                ((DefaultTableModel) this.jTabla.getModel()).removeRow(selected);
            } else {
                String nombre = (String) jTabla.getValueAt(selected, 0);
                HiloDescarga borrador = new HiloDescarga(this, null, nombre, -1, -1);
                borrador.borrar();
                ((DefaultTableModel) this.jTabla.getModel()).removeRow(selected);
            }
            XMLCliente xml = new XMLCliente();
            xml.escribirArchivos(this);
        } catch (IOException ex) {
            Logger.getLogger(VentanaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }

    }//GEN-LAST:event_eliminarActionPerformed
/**
 * Setea la fila la cual se va a seleccionar para realizar las operaciones
 * con la descarga de archivo y cambia los botones para representar el estado
 * de dichas operacones
 * @param evt
 */
    private void jTablaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTablaMouseClicked

        this.selected = jTabla.getSelectedRow();
        if (this.selected >= 0) {
            String status = (String) jTabla.getValueAt(selected, 3);

            if (status.matches("Descargando") == true) {
                cancelar.setVisible(true);
                pausar.setVisible(true);
                pausar.setText("Pausar");
                eliminar.setVisible(true);
            }

            if (status.matches("Pausado") == true) {
                cancelar.setVisible(true);
                pausar.setText("Continuar");
                pausar.setVisible(true);
                eliminar.setVisible(true);
            }
            if (status.matches("Cancelado") == true) {
                eliminar.setVisible(true);
                pausar.setVisible(true);
                pausar.setText("Recomenzar");
            }

            if (status.matches("Descarga Completada") == true) {
                cancelar.setVisible(false);
                pausar.setVisible(false);
                pausar.setText("Pausar");
                eliminar.setVisible(false);

            }   // TODO add your handling code here:
        }
    }//GEN-LAST:event_jTablaMouseClicked
/**
 * metodo que solicita la lista de archivos que tiene la red de servidores
 * @param evt
 */
    private void jListarArchivosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jListarArchivosActionPerformed
        // TODO add your handling code here:
        try {
            Socket w = new Socket(jIP.getText(), 6000);
            DataInputStream entrada = new DataInputStream(w.getInputStream());
            DataOutputStream salida = new DataOutputStream(w.getOutputStream());
            salida.writeUTF("RDIR");
                        System.out.println("NUEVA TABLA");
            this.setIp0(entrada.readUTF());
            System.out.println(this.getIp0());
            this.setIp1(entrada.readUTF());
            System.out.println(this.getIp1());
            this.setIp2(entrada.readUTF());
            System.out.println(this.getIp2());
            llenarcombobox(entrada.readUTF());
            jListarArchivos.setVisible(false);
            w.close();
        } catch (UnknownHostException ex) {
            JOptionPane.showMessageDialog(rootPane, "Error de conexion", "Error", JOptionPane.ERROR_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(rootPane, "Error de conexion", "Error", JOptionPane.ERROR_MESSAGE);
        }
    }//GEN-LAST:event_jListarArchivosActionPerformed

    /**
     * renderiza ventana de error de conexion
     */
    public void alertaerror(){
        JOptionPane.showMessageDialog(rootPane, "Error de conexion", "Error", JOptionPane.ERROR_MESSAGE);
        if (this.pausar.getText().equals("Pausar")) this.pausar.setText("Continuar");
    }

    /**
     * renderiza mensaje de error cuando se acaban los intentos de reconexion
     */
    public void finintentos(){
        JOptionPane.showMessageDialog(rootPane, "Fin de intentos de conexion", "Error", JOptionPane.ERROR_MESSAGE);
        if (this.pausar.getText().equals("Pausar")) this.pausar.setText("Continuar");
    }
    /**
     * crea una nueva fila en la lista de descargas con la informacion correspondiente
     * LLamado desde hilodescarga
     * @param nombre
     * @param cantidad
     * @param tamano
     * @param hilo
     */
    public void agregarfila(String nombre, Long cantidad, Long tamano, int hilo) {
        ((DefaultTableModel) this.jTabla.getModel()).addRow(new Object[]{nombre, cantidad / 1000, tamano / 1000, "Descargando", hilo});
    }

    /**
     * crea una nueva fila en la lista de descargas con la informacion correspondiente
     * Solo es llamado desde el XML en la carga de la lista de archivos
     * @param nombre
     * @param cantidad
     * @param tamano
     * @param estado
     */
    public void agregarfila(String nombre, Long cantidad, Long tamano, String estado) {
        ((DefaultTableModel) this.jTabla.getModel()).addRow(new Object[]{nombre, cantidad, tamano, estado, null});
    }

    /**
     * metodo que crea un objeto de tipo Archivo para que la clase
     * XMLCliente pueda transformar el mismo a un nodo del archivo XML
     * @param i
     * @return
     */
    public Archivo getArchivo(int i) {
        Archivo archi = new Archivo();
        archi.setNombre((String) jTabla.getValueAt(i, 0));
        //archi.setCantidad((Long) jTabla.getValueAt(i, 1));
        archi.setTotal((Long) jTabla.getValueAt(i, 2));
        archi.setEstado((String) jTabla.getValueAt(i, 3));
        if (archi.getEstado().equals("Descargando")) {
            archi.setEstado("Pausado");
        }
        return archi;
    }

    /**
     * Metodo que intenta reconectar a otro servidor
     * cuando se cae una descarga
     * @param nombre
     * @param reconectar
     */
    public void reconectar(String nombre, int reconectar) {

        // busca cual es la fila q tiene el nombre del archivo y busca el hilo asociado
        int count = jTabla.getRowCount();
        String nombreentabla;

        System.out.println("Tabla");
        System.out.println("ip1: " + this.ip0);
        System.out.println("ip2: " + this.ip1);
        System.out.println("ip3: " + this.ip2);

        for (int i = 0; i < count; i++) {
            nombreentabla = (String) jTabla.getValueAt(i, 0);
            if (nombreentabla.matches(nombre) == true) {
                this.selected = i;
            }
        }



        boolean tratar = true;
      
        switch (reconectar) {
            case 1:
                  this.jIP.setText("");
                this.jIP.setText(ip1);
                System.out.println("Tratando de reconectar con otro servidor 1    " + this.jIP.getText());
                break;
            case 2:
                  this.jIP.setText("");
                this.jIP.setText(ip2);
                System.out.println("Tratando de reconectar con otro servidor 2    " + this.jIP.getText());
                break;
            case 3:
                  this.jIP.setText("");
                this.jIP.setText(ip0);
                System.out.println("Tratando de reconectar con otro servidor 3    " + this.jIP.getText());
                break;
            default: {
                tratar = false;
                JOptionPane.showMessageDialog(rootPane, "Agotados intentos de reconexion", "Error", JOptionPane.ERROR_MESSAGE);
            }
        }

        if (tratar == true) {
            XMLCliente xml = new XMLCliente();

            try {
                int hilo = (Integer) jTabla.getValueAt(selected, 4);
                VectorHilos.get(hilo).cerrar();
                VectorHilos.setElementAt(null, hilo);
                jTabla.setValueAt("Pausado", selected, 3);
                jTabla.setValueAt(null, selected, 4);
                xml.escribirArchivos(this);
            } catch (Exception ex) {
            }

            // hacer esto con el nuevo ip
            HiloDescarga nuevadescarga = new HiloDescarga(this, jIP.getText(), (String) jTabla.getValueAt(selected, 0), VectorHilos.size(), reconectar + 1);
            VectorHilos.add(nuevadescarga);
            Thread nuevohilodescarga = new Thread(nuevadescarga);
            nuevohilodescarga.start();
            xml.escribirArchivos(this);
        }

    }

    /**
     * actualiza el estado de la descarga del archivo
     * @param status
     * @param hilo
     * @param cantidad
     */
    public void actualizarstatus(String status, int hilo, Long cantidad) {

        jTabla.setValueAt("Descargando", selected, 3);
        jTabla.setValueAt(hilo, selected, 4);
        jTabla.setValueAt(cantidad / 1000000, selected, 1);
        pausar.setText("Pausar");

    }

    /**
     * actualiza cantidad descarga del archivo
     * @param cantidad
     * @param hilo
     */
    public void actualizarcantidad(Long cantidad, int hilo) {
        int count = jTabla.getRowCount();
        for (int i = 0; i < count; i++) {
            if (jTabla.getValueAt(i, 4) != null && (Integer) jTabla.getValueAt(i, 4) == hilo) {
                jTabla.setValueAt(cantidad / 1000, i, 1);
                count = i;
            }

        }

        long total = (Long) jTabla.getValueAt(count, 2);
        long lleva = (Long) jTabla.getValueAt(count, 1);
        if (lleva == total) {
            VectorHilos.setElementAt(null, hilo);
            jTabla.setValueAt("Descarga Completada", count, 3);
            jTabla.setValueAt(null, count, 4);
            cancelar.setVisible(false);
            pausar.setVisible(false);
            pausar.setText("Pausar");
            eliminar.setVisible(false);
        }
        XMLCliente xml = new XMLCliente();
        xml.escribirArchivos(this);
    }

    public String getStatus(int acc) {
        if (acc == 1) {
            return (String) jTabla.getValueAt(selected, 3);
        } else {
            return "null";
        }
    }

    public int getRowCount() {
        return jTabla.getRowCount();
    }

    /**
     * metodo que llena el combo box con la lista de archivos recibida
     * por parte de la red de servidores
     * @param listaarchivos
     */
    public void llenarcombobox(String listaarchivos) {
        System.out.println(listaarchivos);
        String[] lista = listaarchivos.split("/");
        for (int i = 0; i < lista.length; i++) {
            this.jComboBox1.addItem(lista[i]);
        }
        jDescargar.setVisible(true);
        jComboBox1.setVisible(true);
    }

    public String getIp0() {
        return ip0;
    }

    public void setIp0(String ip0) {
        this.ip0 = ip0;
    }

    public String getIp1() {
        return ip1;
    }

    public void setIp1(String ip1) {
        this.ip1 = ip1;
    }

    public String getIp2() {
        return ip2;
    }

    public void setIp2(String ip2) {
        this.ip2 = ip2;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new VentanaCliente().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton cancelar;
    private javax.swing.JButton eliminar;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JButton jDescargar;
    private javax.swing.JTextField jIP;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JButton jListarArchivos;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTabla;
    private javax.swing.JButton pausar;
    // End of variables declaration//GEN-END:variables
}
